package main

import "fmt"

// 函数演示
// 没有返回值和参数的函数
func sayHello() {
	fmt.Println("hello world")
}

// 定义有参数和返回值的函数
/*只有一个返回值，可以只定义类型，但是在函数体内需要初始化*/
func intSum(x int, y int) int {
	result := 0
	result = x + y
	return result
}

/*将返回值，提前定义好，函数体可以直接使用
 */
func intSum01(x int, y int) (result int) {
	result = x + y
	return result
}

/* 多个参数，类型一样的时候，可以省略写
func intSum04(x, y int) (result int) {
	result = x + y
	return result
}
*/

// 可变参数
func intSum02(x ...int) int {
	result := 0
	for _, v := range x {
		result += v
	}
	return result
}

// 有固定参数的多个参数
func intSum03(x int, y ...int) int {
	result := x
	for _, v := range y {
		result += v
	}
	return result
}

/*多个返回值*/
func intSum04(x int, y int) (result, sub int) {

	result = x + y
	sub = x - y
	return
}

func main() {
	sayHello()
	result := intSum(5, 3)
	fmt.Println(result)

	result01 := intSum01(10, 3)
	fmt.Println(result01)
	// 可变参数的函数调用
	ret1 := intSum02()
	ret2 := intSum02(10)
	ret3 := intSum02(10, 20)
	ret4 := intSum02(10, 20, 30)
	fmt.Println(ret1, ret2, ret3, ret4)

	ret5 := intSum03(100)
	ret6 := intSum03(100, 10)
	ret7 := intSum03(100, 10, 20)
	ret8 := intSum03(100, 10, 20, 30)
	fmt.Println(ret5, ret6, ret7, ret8)

	a, b := intSum04(200, 100)
	fmt.Println(a, b)

}
